package com.yang.controller;

import com.yang.entity.*;
import com.yang.entity.commodityDetail.Detail;
import com.yang.entity.commodityDetail.Specs;
import com.yang.interceptors.LogExecutionTime;
import com.yang.service.CommodityService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/commodity")
public class CommodityController {

    @Resource
    private CommodityService commodityService;

    /**
     * 获取商品分类列表
     *
     * @return
     */
    @GetMapping("/categoryList")
    @LogExecutionTime
    public Result<List<Category>> getCategoryList() {
        List<Category> categoryList = commodityService.getCategoryList();
        return Result.success(categoryList);
    }

    /**
     * 获取商品展示列表
     *
     * @param pageNum    当前页
     * @param pageSize   每页数量
     * @param categoryId 分类id
     * @param keyword    关键字
     * @return commodityList 商品列表，包含商品标题、价格、图片列表、参数实体类
     */
    @PostMapping("/list")
    @LogExecutionTime
    public Result<List<Commodity>> getCommodityList(
            @RequestParam(required = false) Integer pageNum,
            @RequestParam(required = false) Integer pageSize,
            @RequestParam(required = false) Integer categoryId,
            @RequestParam(required = false) String keyword
    )  {
        // 结果集
        List<Commodity> commodityList;
        // 根据keyword、categoryId调用service层方法，获取商品列表
        if (!keyword.equals("null") && !keyword.isEmpty()) {
            // 保留中文、字母、数字
            keyword = keyword.trim().replaceAll("[^\\u4e00-\\u9fa5a-zA-Z0-9]", "");
            // 转换为小写字母，以便不区分大小写进行搜索
            keyword = keyword.toLowerCase();
            // 调用搜索商品列表方法，获取商品列表
            commodityList = commodityService.getSearchCommodity(pageNum, pageSize, keyword);
        }else{
            // 调用普通商品列表方法，获取商品列表
            commodityList = commodityService.getCommodityList(pageNum, pageSize, categoryId);
        }

        return Result.success(commodityList);
    }

    /**
     * 根据商品id获取商品规格信息
     *
     * @param commodityId 商品id
     * @return specsList 商品规格信息
     */
    @PostMapping("/getDetailById")
    @LogExecutionTime
    public Result<Detail> getDetailById(Long commodityId) {
        // 调用业务逻辑层方法，获取商品参数信息
        Detail detail = commodityService.getDetailById(commodityId);
        return Result.success(detail);
    }

}
